package com.bombitarodriguez.dominio;

import java.util.ArrayList;
import java.util.HashMap;

import com.bombitarodriguez.interfaces.ObjetoReaccionable;

import fiuba.algo3.titiritero.modelo.GameLoop;
import fiuba.algo3.titiritero.modelo.ObjetoDibujable;

/**
 * 
 * @author Mauro
 *
 */
public class Mapa {
	
	static private Mapa mapa;
	static private GameLoop miGame;
	static private  ArrayList<ObjetoDibujable> dibujos;
	HashMap<Posicion, Casillero> mapaCasillero;
	
	private Mapa() {
		mapaCasillero = new HashMap<Posicion, Casillero>();
		Mapa.dibujos = new ArrayList<ObjetoDibujable>();
		
	}
	
	static public Mapa getMapa() {
		if (mapa == null) {
			mapa = new Mapa();
		}
		return mapa;
	}
	
	public void agregarCasillero(Posicion posicion, Casillero casillero) {
		mapa.mapaCasillero.put(posicion, casillero);
	}
	
	
	public Casillero getCasillero(Posicion posicion) {
		return mapa.mapaCasillero.get(posicion);
	}
	
	public void reposicionar(ObjetoReaccionable objetoAMover, Casillero casilleroAOcupar) {
		Casillero casilleroObj = getCasillero(objetoAMover.getPosicion());
		casilleroObj.quitarObjeto(objetoAMover);
		casilleroAOcupar.agregarObjeto(objetoAMover);
	}

	public HashMap<Posicion, Casillero> getMapaCasillero() {
		return mapaCasillero;
	}

	public void setMapaCasillero(HashMap<Posicion, Casillero> mapaCasillero) {
		this.mapaCasillero = mapaCasillero;
	}
	
	public static void quitarDibujable(ObjetoReaccionable objetoAQuitar) {
		miGame.remover(objetoAQuitar.getVista());
		dibujos.remove(objetoAQuitar.getVista());
		
	}

	public static void agregarDibujable(ObjetoReaccionable objetoAAgregar) {
		miGame.agregar(objetoAAgregar.getVista());
		dibujos.add(objetoAAgregar.getVista());

	}
	
	public static void setGameLoop(GameLoop loop){
		miGame = loop;
	}

}
